package 对称二叉树;

public class Solution2 {
    public boolean isSymmetric(TreeNode root) {
        // 使用递归
        // ① 参数：TreeNode p, TreeNode q . 返回值：boolean
        // ② 终止条件：p == null && q == null => true 或者 p == null || q == null => false
        // ③ 单层递归逻辑:p和q刚开始都指向该树的根，随后p左移时，q右移。p右移时，q左移。同时比较两个指针所指节点的值是否相等
        return checkSymmetric(root.left, root.right);
    }

    private boolean checkSymmetric(TreeNode p, TreeNode q) {
        if( p == null && q == null )
            return true;
        if( p == null || q == null )
            return false;
        return p.val == q.val && checkSymmetric(p.left, q.right) && checkSymmetric(p.right, q.left);
    }
}
